Computers and other programmable electronic devices continue to be integrated into every aspect of society. Whereas computers once occupied entire rooms, computers and the integrated circuit devices, or chips, that power such computers have now been miniaturized and commoditized to such an extent that they can be found in even the most mundane of products and devices.
Programmable chips such as microprocessors, microcontrollers, Application Specific Integrated Circuits (ASIC's) and the like continue to increase in complexity and power while costs, power consumption and feature sizes decrease. Whereas computers once incorporated separate chips for processors, graphics controllers, coprocessors, memory controllers, and other chipset logic, oftentimes all of these types of functional units are integrated into a single programmable chip. Moreover, once a particular chip design has been developed, tested and verified, manufacturing costs are often comparatively low on a per unit basis.
A significant portion of the effort and expense associated with bringing a programmable chip to market are therefore devoted to the initial design, testing and verification of a programmable chip. For this reason, design reuse is employed whenever possible so that portions of a programmable chip, such as particular processor core designs, functional units, and other logic blocks, which have previously been designed, tested and verified, do not need to be recreated from scratch.
Even with design reuse, however, the integration of multiple design components into a common design frequently requires some custom logic to be designed and tested to ensure that the components will correctly operate with one another once integrated onto the same programmable chip. For example, modern microprocessors typically include functional units such as issue or instruction units, load/store units, execution units, memory controllers, graphics controllers, cache and other on-board memories, etc., and development of such microprocessors often requires substantial development, testing and verification efforts to ensure that all of the functional units operate in an intended manner.
In addition, microprocessor designs may be utilized for different types of workloads, and it has been found that different types of workloads are often handled most efficiently using different types of instructions. General purpose office software, for example, typically relies primarily on fixed point instructions, while collision detection physics algorithms typically used in computer gaming are most efficiently performed using floating point scalar instructions. High speed 3D graphics algorithms like rasterization are most efficiently performed using vector fixed point instructions while having very little need for double precision vector floating point instructions. Nonetheless, most workloads also usually require some basic instructions at least for basic control flow, e.g., instructions for performing branches, loads/stores, and fixed point math.
As a result, many microprocessor designs rely on a basic design that can be extended through the use of different functional units to provide various designs that are optimized for different applications. For example, it may be desirable to extend the functionality of a microprocessor by integrating multiple processing cores together to facilitate parallel processing, as well as integrating various execution units within a processing core to optimize the core to handle certain types of workloads. For example, while a basic microprocessor design often includes a processing core with an issue or instruction unit that issues instructions to an execution unit referred to as a fixed point unit, integer unit or arithmetic logic unit that handles integer operations, additional execution units, e.g., floating point execution units, graphics engines, physics engines, encryption engines, and the like may be incorporated into the basic design to provide an application specific design that is optimized for certain applications.
With the ability to combine different types of execution units in various processing cores and programmable chips, significant design flexibility is provided for developing application-specific hardware. On the other hand, given the substantial up-front efforts still required to design, test and verify multiple functional units integrated into application-specific programmable chips, there are still substantial costs associated with bringing application-specific programmable chips to market.
Therefore, a significant need continues to exist in the art for a manner of facilitating the development of application-specific programmable chips and electronic devices incorporating the same.